#include <string.h>
#include <iostream>
using std::cout;
using std::endl;

class String{
public:
    String()
    :_pstr(new char[1]())
    {

    }
    String(const char * pstr)
    :_pstr(new char[strlen(pstr) + 1]())
    {
        strcpy(_pstr, pstr);
    }


    //用一个已经存在的对象创建一个新的对象
    //全部的数据成员都需要复制一遍
    //如果是指针数据成员，那么需要重新申请堆空间，数据复制过来
    String(const String & rhs)
    :_pstr(new char[strlen(rhs._pstr) + 1]())
    {
        strcpy(_pstr, rhs._pstr);
    }

    //赋值运算符函数 深拷贝
    //4步走
    String & operator=(const String & rhs){
        if(this != &rhs){
            delete [] _pstr;
            _pstr = new char[strlen(rhs._pstr) + 1]();
            strcpy(_pstr, rhs._pstr);
        }
        return *this;
    }

    //析构函数
    ~String(){
        if(_pstr){
            delete [] _pstr;
            _pstr = nullptr;
        }
    }


private:
    char * _pstr;
};


void test(){

}

int main()
{
    test();
    return 0;
}

